package com.demo.java.OD451_500.OD491;

import java.util.Scanner;
import java.util.HashMap;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数组连续和(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146424504
 */
public class OdMain {
    public static int count = 0;  // 满足条件的区间数
    public static int left = 0;   // 左指针
    public static int right = 0;  // 右指针

    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        // 读取数组长度和目标值
        String input_str = in.nextLine();
        String[] tmp2 = input_str.split(" ");
        int[] params = new int[tmp2.length];
        for (int i = 0; i < tmp2.length; i++) {
            params[i] = Integer.parseInt(tmp2[i]);
        }
        int n = params[0];        // 数组长度
        int target = params[1];   // 目标值

        // 读取数组元素
        String input_str1 = in.nextLine();
        String[] tmp3 = input_str1.split(" ");
        int[] nums = new int[tmp3.length];
        for (int i = 0; i < tmp3.length; i++) {
            nums[i] = Integer.parseInt(tmp3[i]);
        }

        // 哈希表存储前缀和，prefix[i] 表示数组前 i 个数的和
        HashMap<Integer, Integer> prefix = new HashMap<>();
        prefix.put(0, 0);  // 初始化前缀和为0，表示空数组的和为0

        // 计算前缀和
        for (int i = 1; i <= n; i++) {
            prefix.put(i, prefix.get(i - 1) + nums[i - 1]);
        }

        // 使用滑动窗口法计算满足条件的区间
        while (true) {
            if (right > n) {  // 如果右指针超出数组长度，结束
                break;
            } else {
                // 判断当前窗口的和是否小于目标值
                if (prefix.get(right) - prefix.get(left) < target) {
                    right++;  // 如果和小于目标值，扩大窗口
                } else {
                    count += n - right + 1;  // 当前窗口满足条件时，计数并缩小窗口
                    left++;  // 移动左指针
                    right = left + 1;  // 保证右指针在左指针之后
                }
            }
        }

        // 输出满足条件的区间数
        System.out.println(count);
    }
}